/*
 * @ Desc: 提供 南瑞继保103有关的数据类型结构
 *
 * */

#ifndef NRJB103_TYPE_H
#define NRJB103_TYPE_H

#include <QByteArray>
#include <QList>
#include "utils.h"

// 南瑞继保103 设备类型信息 ，apci使用
#define APCI_LEN 28     // apci 占用28个字节

// 厂站地址，这个目前家里的两台设备都是默认的 0000
#define ADDR_SRC_FACTORY "0000"
#define ADDR_DEST_FACTORY "0000"

#define STATION_CTRL_NODE1 0x01;     // 站控节点类型1
#define STATION_CTRL_NODE2 0x02;     // 站控节点类型2
#define PROTECT_MANAGE  0x03;   //保护管理设备
#define DEVICE_TYPE_ROUTE 0x28;   //路由设备
#define DEVICE_TYPE_PROTECT 0x29;     // 保护设备
#define DEVICE_TYPE_MEAS_CTL 0x2a;     //测控设备
#define DEVICE_TYPE_PROTE_MEAS_CTL 0x2b;     // 保护测控
#define DEVICE_TYPE_PROBLEM_RECORD 0x2c;   //故障录波
#define DEVICE_TYPE_CAL 0x2d;   //计量设备
#define DEVICE_TYPE_CHECK_WRON 0x2e;   //防误校验设备
#define DEVICE_TYPE_OTHER 0x31;   //其他

#define POS_ASDU_COT 4
#define POS_ASDU_FUN 8
#define POS_ASDU_INF 10
#define POS_ASDU_RII 12
#define POS_ASDU_NGD 14
#define POS_ASDU_GROUPNO 16

#define KEY_BILLGROUP_NAME "定值"


//传输层报文结构 apci
class NRJB_APCI_Frame
{
public:
    QByteArray head1 = "90eb";
    QByteArray  len =  "14000000";        // len = head2 之后的部分长度之和 20 + asdu的长度,占用两个字节
    QByteArray head2 = "90eb";
    QByteArray srcFactorAddr = ADDR_SRC_FACTORY;     //源厂站地址, 跨厂站通讯，数据发送端
    QByteArray srcDeviceAddr;     //源设备地址
    QByteArray destFactoryAddr = ADDR_DEST_FACTORY;   //目标厂站地址，数据接收厂站地址
    QByteArray destDeviceAddr;    //目标设备地址
    QByteArray dataNo = "0000";            //数据编号,这个需要自增1，否则一次连接智能发送一次同一个数据
    QByteArray deviceType = "2b00";        //设备类型
    QByteArray deviceNetState = "5000";   // 设备网络状态
    QByteArray firstRuteDeviceAddr = "0000";   // 首层路由地址
    QByteArray lastRuteDeviceAddr = "0000";    // 最后设备地址
    QByteArray reseverByte = "ffff";       //保留字节
    //90eb 14000000 90eb 0 23000 dc000 2b00 5000 0000 ffff
    inline QByteArray getAPCI(uint16_t  srcDevAddr, uint16_t destDevAddr)
    {
        QByteArray transFrame;

        QByteArray d1b =  Utils::unsignedToHexStr(srcDevAddr);
        QByteArray d2b =  Utils::unsignedToHexStr(destDevAddr);

       // transFrame.resize(20);          // 传输层 APCI 占20个字节
        transFrame.push_back(head1);
        transFrame.push_back(len);
        transFrame.push_back(head2);
        transFrame.push_back(srcFactorAddr);
        transFrame.push_back(d1b);
        transFrame.push_back(destFactoryAddr);
        transFrame.push_back(d2b);
        transFrame.push_back(dataNo);
        transFrame.push_back(deviceType);
        transFrame.push_back(deviceNetState);
        transFrame.push_back(firstRuteDeviceAddr);       // 数据编号，在应用的时候累加
        transFrame.push_back(lastRuteDeviceAddr);
        transFrame.push_back(reseverByte);
        return transFrame;
    }
};

#endif // NRJB103_TYPE_H
